/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package serverb.negocio;

import server.excepciones.BeneficiarioNoExistenteException;
import server.excepciones.CitasPendientesException;
import server.excepciones.UsuarioNoExistenteException;
import server.excepciones.UsuarioYaExistenteException;
import java.sql.SQLException;

import server.dominio.Beneficiario;
import server.dominio.Medico;
import server.dominio.Usuario;

import server.excepciones.BeneficiarioYaExistenteException;
import server.excepciones.MedicoNoExistenteException;
import server.excepciones.MedicoYaExistenteException;



/**
 *
 * @author tpaxle
 */
public class Controlador_G_UsuariosB {
    private Fachada_ServidorB fachada_basedats;
    private Controlador_ServidorB c_servidor;

    public Controlador_G_UsuariosB(Controlador_ServidorB c_servidor){
            //Lee su Configuracion
            fachada_basedats= new Fachada_ServidorB();
            this.c_servidor= c_servidor;
    }

     /*Insercion de Usuarios*/
    /******************************************************************/
    /*Insercion Beneficiario*/
    public void crearbeneficiario(Beneficiario beneficiario) throws  SQLException, BeneficiarioYaExistenteException, Exception {
        fachada_basedats.nuevobeneficiario(beneficiario);
    }

    /*Insercion de Medicos*/
    public void crearmedico(Medico medico) throws SQLException,  UsuarioYaExistenteException, MedicoYaExistenteException{
        //Comprueba si el de la sesion idSesion es administrador y el login que le hemos pasao es correcto(No existe)
        //Ahora comprobamos que el login, nif es correcto, si se intenta insertar pero hay un constraintviolationexception ya hay algun otro
        fachada_basedats.nuevousuario(medico.getUsuario());
        fachada_basedats.nuevomedico(medico);
    }
    /*Fin Insercion Beneficiario*/
    public void crearUsuario(Object usuario) throws UsuarioYaExistenteException, SQLException, Exception {
        Usuario usuario_aux= (Usuario)usuario;
        fachada_basedats.nuevousuario((Usuario)usuario_aux);
    }




    /*Modificacion de un Usuario normal, si es normal y pasa a normal, se modifica,
     * si pasa a ser medico, se inserta el nuevo medico
     */
    public void modificarUsuario(Object informacion) throws  SQLException, UsuarioYaExistenteException, MedicoYaExistenteException, UsuarioNoExistenteException {
        Usuario usuario_aux=(Usuario)informacion;

        fachada_basedats.modificarUsuario(usuario_aux);


        if(usuario_aux.getDescripcionrol().getIdRolPk()==3){
            Medico medico_aux= (Medico)informacion;
            fachada_basedats.nuevomedico(medico_aux);
        }
        
    }
    /*Modificacion de un medico, un medico deja de serlo, por lo tanto, queda una fila medico perdida que debe capturarse y eliminarse*/
    public void modificarUsuarioM(Object informacion) throws SQLException, UsuarioYaExistenteException, UsuarioNoExistenteException, MedicoNoExistenteException {
        Usuario usuario_aux=(Usuario)informacion;
        fachada_basedats.modificarUsuario(usuario_aux);
        Medico medico = fachada_basedats.comprobarmedicoperdido((Medico)informacion);
         if(medico.getUsuario().getDescripcionrol().getIdRolPk()!=3 && medico!= null)
            fachada_basedats.eliminarmedico(medico);
        
    }
    public void modificarMedico(Medico medico) throws  SQLException, MedicoNoExistenteException, MedicoYaExistenteException {
          fachada_basedats.actualizar(medico);
          //Comprobamos si era medico y ha dejado de serlo
    }
    public void modificarBeneficiario(Beneficiario beneficiario) throws SQLException, BeneficiarioYaExistenteException, BeneficiarioNoExistenteException {
            fachada_basedats.actualizar(beneficiario);
    }

    /*elmina un beneficiario*/
    public void eliminarbeneficiario(Beneficiario beneficiario) throws  SQLException, BeneficiarioNoExistenteException, CitasPendientesException {
            fachada_basedats.eliminarbeneficiario(beneficiario);
          
    }

    public void eliminarmedico(Medico medico) throws  SQLException, UsuarioNoExistenteException {
        Usuario usuario_aux= medico.getUsuario();
        fachada_basedats.eliminarusuario(usuario_aux);

        //Actualizar todos los beneficiarios automaticamente
        //Mandar a los administradores la eliminacion de este usuario

    }
    
    public void borrarUsuario(Object informacion) throws SQLException, UsuarioNoExistenteException {
        Usuario usuario_aux= (Usuario)informacion;
        fachada_basedats.eliminarusuario(usuario_aux);


         

    }


}
